
import ArrayStack from '../First/01_栈结构Stack/02_实现栈结构Stack(重构)' 

// 十进制转二进制，最开始的余数转成二进制数后是放在最后面，是先进后出的逻辑的，所以用栈

// 1、函数接收一个数字，返回一个字符串

// 2、实例化一个栈，

// 3、入栈操作，while循环,循环条件一是传入的number/2向下取整的结果大于0（一直除以2），用栈的push方法让这个数除以2的余数放在栈底，二进制0101(入栈),
// 然后将这个数除以2的结果向下取整(作为循环条件)，当这个数的值大于0时，就一直进行while循环

// 4、出栈，while循环，循环条件时当这个栈不为空就一直出栈，用栈的pop方法，取出并删除，然后将结果拼接到之前的字符串上，最终将字符串return
function decimalToBinary (decimal: number): string { 
    const stack = new ArrayStack()
    let binary = '';

    while( decimal > 0){
        // 计算出余数
        const result = decimal % 2;
        // 放入栈中
        stack.push(result);
        // 算出除以2的结果，继续循环
        decimal = Math.floor(decimal/2)
    }
    while(!stack.isEmpty()){
        const res = stack.pop()
        binary += res;
    }
    return binary
}

console.log(decimalToBinary(35))
console.log(decimalToBinary(100))